Field
This non-provisional U.S. patent application relates generally to caching data in computing systems and more specifically to managing cache resources.
Description of Related Art
In computing systems, a cache is a memory system or subsystem that transparently stores data so that future requests for that data can be served faster. As an example, many modern microprocessors incorporate an instruction cache holding a number of instructions; when the microprocessor executes a program loop where the same set of instructions are executed repeatedly, these instructions are fetched from the instruction cache, rather than from an external memory device at a performance penalty of an order of magnitude or more.
In other environments, such as where a computing system hosts multiple virtual machines under the control of a hypervisor, with each virtual machine running one or more applications, caching of objects stored on a network attached storage system can provide significant performance improvements. In some instances, records are cached and then written to the network attached storage system according to a “write back” algorithm. In the “write back” algorithm, the received record is written to the cache before being written to the network attached storage system. The cache system can then direct the writing of the record to the network attached storage system. In other instances, records are synchronously written to the cache and to the network attached storage system according to a “write through” algorithm.
When read commands are sent from the virtual machine to the network attached storage, it may be more efficient to read the records from the cache rather than from the network attached storage. While various write-through and write-back caching algorithms exist, caching and retrieving data quickly and accurately remains a challenge.
Cache resources, as that term is used herein, are physical machines such as flash memory used to store the cached data as well as various network resources (e.g., routers, switches, load balancers, communications servers, etc.) used to access remotely stored cached data. When any of these cache resources slow or fail, benefit of the cache (i.e., faster reads and/or writes) can be reduced or eliminated. This is because the cache typically waits until after the slowed or failed cache operation has occurred before initiating a regular read or write to the network attached storage. Further, this problem is exacerbated when multiple virtual machines are vying for the cache resources. What is needed therefore is a way to continue providing cache benefits despite incurring cache resource performance issues.